import axios from 'axios'
import { API_URL, API_TIMEOUT } from '../config/api'

const apiClient = axios.create({
  baseURL: API_URL,
  timeout: API_TIMEOUT,
  headers: {
    'Content-Type': 'application/json'
  }
})

export function fetchMemes({ page = 1, limit = 20 } = {}) {
  return apiClient.get('/memes', {
    params: { page, limit }
  })
}

export function searchMemes({ query, page = 1, limit = 20 } = {}) {
  if (!query) return Promise.reject(new Error('搜索关键词不能为空'))
  
  // 将普通搜索重定向到标签搜索
  return apiClient.get('/memes/search/tag', {
    params: { keyword: query, page, limit }
  })
}

/**
 * 根据标签关键字搜索表情包
 * @param {Object} options - 选项
 * @param {string} options.keyword - 标签关键字
 * @param {number} options.page - 页码 (默认: 1)
 * @param {number} options.limit - 每页数量 (默认: 20)
 * @returns {Promise} - 包含搜索结果的响应
 */
export function searchMemesByTag({ keyword, page = 1, limit = 20 } = {}) {
  if (!keyword) return Promise.reject(new Error('标签关键字不能为空'))
  
  return apiClient.get('/memes/search/tag', {
    params: { keyword, page, limit }
  })
}

export function fetchLatestMemes({ page = 1, limit = 12 } = {}) {
  return apiClient.get('/latest-memes', {
    params: { page, limit }
  })
}

export function fetchPopularMemes({ limit = 20 } = {}) {
  return apiClient.get('/memes/popular', {
    params: { limit }
  })
}

export function uploadMeme(formData) {
  if (!formData) return Promise.reject(new Error('表单数据不能为空'))
  
  return apiClient.post('/memes/upload', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 获取标签使用统计数据
 * @param {Object} options - 选项
 * @param {number} options.limit - 返回标签的最大数量 (默认: 20)
 * @param {number} options.minCount - 标签最小出现次数 (默认: 1)
 * @returns {Promise} - 包含标签统计数据的响应
 */
export function fetchTagStats({ limit = 20, minCount = 1 } = {}) {
  return apiClient.get('/tags/stats', {
    params: {
      limit,
      min_count: minCount
    }
  })
}

/**
 * 获取所有可用标签列表
 * @returns {Promise} - 包含标签列表的响应
 */
export function fetchAllTags() {
  return apiClient.get('/tags')
} 